package com.qingfeng.medical.biz.hosp.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.qingfeng.medical.biz.hosp.domain.entity.Schedule;
import com.qingfeng.medical.biz.hosp.domain.vo.DepScheduleVo;
import com.qingfeng.medical.biz.hosp.domain.vo.ScheduleDepPatientVo;
import com.qingfeng.medical.biz.hosp.domain.vo.ScheduleVo;
import com.qingfeng.medical.biz.hosp.domain.vo.ScheduleWeekDayVo;
import com.qingfeng.medical.biz.information.domain.vo.DoctorVo;

import java.util.Date;
import java.util.List;

/**
 * 排班管理
 *
 * @author 清风学Java
 * @date 2023-04-14 14:47:17
 */
public interface ScheduleService extends IService<Schedule> {

    /**
     * 科室门诊关系
     * @return
     */
    List<ScheduleDepPatientVo> findDepPatient();

    /**
     * 查询医师下的科室门诊关系
     * @param userId
     * @return
     */
    List<ScheduleDepPatientVo> findDepPatientByDoctorId(Long userId);

    /**
     * 分页查询排班日期数据
     * @param page
     * @param limit
     * @param depId
     * @return
     */
    ScheduleWeekDayVo scheduleWeekDay(Long page, Long limit, Long depId);

    /**
     * 排班管理列表
     * @param weekDay
     * @return
     */
    List<ScheduleVo> findScheduleVo(Date weekDay, Long depId);

    /**
     * 查询科室门诊下面的空闲医生
     * @param weekDay
     * @param depId
     * @return
     */
    List<DoctorVo> findFreeDoctorList(Date weekDay, Long depId);

    /**
     * 一键排班
     * @param userId
     * @param weekDay
     * @param depId
     */
    void saveSchedule(Long userId, Date weekDay, Long depId);

    /**
     * 门诊停诊，那个门诊停诊，当天的排班全部修改状态为禁用，并发布停诊通知
     * @param weekDay
     * @param depId
     */
    @Deprecated
    void ceaseSchedule(Date weekDay, Long depId);

    /**
     * 修改排班状态
     * @param id
     */
    void updateStatusById(Long id);

    /**
     * 根据Id查询排班挂号信息
     * @param id
     * @return
     */
    DepScheduleVo depScheduleInfo(Long id);
}

